import { getCharNumInString } from "../helper"

const ChineseNumbers = ["一", "二"]

const LowerCaseLetters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
    "aa", "ab", "ac", "ad", "ae", "af", "ag", "ah", "ai", "aj", "ak", "al", "am", "an", "ao", "ap", "aq", "ar", "as", "at", "au", "av", "aw", "ax", "ay", "az"]

//策略
export const checkStrategy = {
    checkChineseNumber(str: string) {
        return ChineseNumbers.indexOf(str) !== -1
    },
    checkLowerCaseLetters(str: string) {
        return LowerCaseLetters.indexOf(str) !== -1
    },
    //类似 1=》 1.1 =》 1.1.1 对的 1=》 1.1 =》 1.2.1 错误
    checkLvByDot(lvStr: string[]) {
        let len = lvStr.length
        if (len === 0) return
        //先根据1 1.1 1.1.1 的.的个数来判断level
        let lv = 0
        let lastItem
        for (let i = 0; i < len; i++) {
            let item = lvStr[i]
            if (i === 0) {
                lv = getCharNumInString(item, ".") + 1
                lastItem = item
            } else {
                //检查1.1 => 1.2的错误
                let curLv = getCharNumInString(item, ".") + 1
                if (curLv - lv !== 1) {
                    // throw new Error(`数字级联顺序级别错误 ${lastItem} => ${item}`)
                    return false
                } else {
                    lv = curLv
                }
                //正则检查 1.1 =》 1.2.1 的错误
                let reg: RegExp = new RegExp(`^${lastItem}`);
                if (!reg.test(item)) {
                    // throw new Error(`数字级联顺序规则错误 ${lastItem} => ${item}`)
                    return false
                }
                lastItem = item
            }
        }
        return true
    },
    checkNumWithDot(str: string) {
        const reg = /^[1-9]{1}\d*(\.[1-9]{1}\d*)*$/
        return reg.test(str)
    },
    checkNumWithDotInherit(str: string, parentStr?: string) {
        if(parentStr == null) return false
        let reg = new RegExp(`^${parentStr}`);
        return reg.test(str)
    },
    checkIsIntegerStr(str: string) {
        let regu = /^[1-9]{1}\d*$/;
        return regu.test(str);
    },  
    isNumber(str:string){
        return parseFloat(str).toString() !== 'NaN'
    }
}


//类型1 第一级大写中文数字开头  第二级小写a -az 三以下级别 按1 1.1 1.1.1 
//
export const checkType1 = (excelJsonData: any) => {



}